Many, if not all, computer systems need to be updated from time to time with new or modified program code--that is, the instructions that control the operation of the computer systems. For example, it may be necessary to update program code to fix errors, or to add new functionality to a computer system. A significant portion of the program code in a computer system is often referred to as system program code. The system program code generally includes the operating system of the computer system, as well as any lower-level program code utilized by the computer system, including microcode, basic input/output system (BIOS) program code, kernel program code, startup program code, etc.
Updating program code, and particularly system program code, can often be disruptive to users, since oftentimes access to a computer system must be restricted, or locked out, during a program code update. Some program code updates may be classified as immediate updates that can be performed immediately without disrupting a computer system. However, a significant number of program code updates are classified as delayed (or pending) updates, often because they require modification or access to currently active program code in a computer system. In such circumstances, a computer system typically must be shutdown and restarted, or "rebooted", to permit the delayed updates to be performed.
For a single-user computer system such as a desktop or portable computer, this may only be a minor inconvenience. On the other hand, for a multi-user computer system such as a mainframe computer, a midrange computer, a server, or the like, a large number of users may be affected. Especially given the increasingly important role of computer systems in an enterprise's day-to-day activities, any computer system downtime can significantly affect productivity. Consequently, it is often critically important to minimize computer system downtime whenever possible.
Computer systems typically have system program code that can be classified into one or more program code levels. Most computer systems at least have one or more levels of system program code, as well as application levels and dynamic library levels, among others. In addition, many computer systems may also have separate microcode levels that are initially executed by one or more processors or other hardware devices upon startup. With many computer systems, a number of program code levels are executed in sequence during startup, with each program code level performing self-initialization and loading the next level in the sequence.
As an example, the AS/400 midrange computer system from International Business Machines Corporation has multiple processors, known as main processors, that perform the primary processing tasks for the computer system. A separate startup, or service, processor is initially executed upon startup to handle a portion of system initialization and to initialize and start each main processor. The startup processor includes its own dedicated microcode stored in an electrically-rewriteable read-only memory such as a flash memory.
Upon initial startup, e.g., as a result of a reboot of the computer system, the startup processor initially executes power-on-boot microcode from its dedicated flash memory to initialize the startup processor and load a startup program from an external storage device. The startup program may be considered to occupy two program levels, with the first level performing self-verification of the startup processor, as well as additional verification of the main processors and a subset of the input/output hardware in the computer system. A second level of the startup program initializes each main microprocessor to permit each main processor to execute dedicated microcode, known as System Licensed Internal Code (SLIC), to perform additional initialization and to load the operating system program code. Next, the operating system program code is executed and initialized, and then the program code for various startup and support applications may also be executed. It is typically only after each of these program code levels has been restarted that users are granted access to the computer system. Typically, rebooting such a computer system can take five minutes or more.
A program code update to many of the program code levels of an AS/400 computer system often requires the computer system to be shutdown and restarted in a maintenance mode to permit updates to the program code to be performed. Then, once the updates have been performed, the computer system must be rebooted to operate in a runtime mode. In practice, the reboot process typically consumes much of the time required to perform program code updates.
A significant need therefore exists for a manner of reducing the time required to perform program code updates on a computer system. Specifically, a need exists for a manner of minimizing the time associated with rebooting a computer system as a result of such program code updates.